// *** ADDED BY HEADER FIXUP ***
#include <cstdlib>
#include <list>
// *** END ***
/*
 * ComandoSQL.cpp
 *
 *  Created on: 08/08/2012
 *      Author: Guilherme Branco
 */
/*----------------------------------*/
#include "ComandoSQL.h"
#include <cstdio>
/*----------------------------------*/
list<ElementoResultado> ComandoSQL::listaResultado;

void ComandoSQL::conectar()
{
    rc = sqlite3_open(nomeBancoDados, &database);
    if( rc != SQLITE_OK )
        throw EErroPersistencia("Erro na conexao ao banco de dados");
}

void ComandoSQL::desconectar()
{
    rc = sqlite3_close(database);
    if(rc!=SQLITE_OK)
        throw EErroPersistencia("Erro na desconexao ao banco de dados");
}

void ComandoSQL::executar()
{
    rc = sqlite3_exec(database, comandoSQL.c_str(), callback, 0, &mensagem);
    if(rc != SQLITE_OK)
    {
        if (mensagem)
            free(mensagem);
        throw EErroPersistencia("Erro na execucao do comando SQL");
    }
}

int ComandoSQL::callback(void *NotUsed, int argc, char **valorColuna, char **nomeColuna)
{
    NotUsed=0;
    ElementoResultado elemento;
    int i;
    for(i=0; i<argc; i++){
      elemento.setNomeColuna(nomeColuna[i]);
      elemento.setValorColuna(valorColuna[i] ? valorColuna[i]: "NULL");
      listaResultado.push_front(elemento);
    }
    return 0;
}
